package com.datang.pet.common.ossUtils;/*
 * @auther 顶风少年
 * @mail dfsn19970313@foxmail.com
 * @date 2019-05-14 10:05
 * @notify 删除OSS文件
 * @version 1.0
 */

import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.DeleteObjectsRequest;
import com.aliyun.oss.model.DeleteObjectsResult;
import com.datang.pet.common.properties.OssAttr;
import com.datang.pet.common.utils.StringUtils;
import org.springframework.stereotype.Component;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;

@Component
public class DeleteFile {
    /*
     * @author 顶风少年
     * @date 2019/5/14 10:15
     * @mail dfsn199703132038@foxmail.com
     * @throws
     * @param
     * @param name 文件名
     * @param type 1图片 2视频
     * @result boolean
     * @notify
     * version 1.0
     */
    public boolean deleteSingFile(String name, Integer type) {

        // 创建OSSClient实例。
        OSSClient ossClient = new OSSClient(OssAttr.ENDPOINT, OssAttr.ACCESSKEYID, OssAttr.ACCESSKEYSECRET);

        //获取bucket名称
        String bucketName = OssUtil.getBucketName(type);
        name = StringUtils.getSourceName(name);
        // 删除文件。
        ossClient.deleteObject(bucketName, name);

        // 关闭OSSClient。
        ossClient.shutdown();

        return true;
    }

    /*
     * @author 顶风少年
     * @date 2019/5/14 19:25
     * @mail dfsn199703132038@foxmail.com
     * @throws
     * @param
     * @param names 文件名list
     * @param type
     * @result java.util.List<java.lang.String>
     * @notify 批量删除文件 注意最多一次删除1000个
     * version 1.0
     */


    public List<String> deleteMultiFile(List<String> names, Integer type) {

        // 创建OSSClient实例。
        OSSClient ossClient = new OSSClient(OssAttr.ENDPOINT, OssAttr.ACCESSKEYID, OssAttr.ACCESSKEYSECRET);

        //获取bucket名称
        String bucketName = OssUtil.getBucketName(type);

        //创建一个删除对象
        DeleteObjectsRequest deleteObjectsRequest = new DeleteObjectsRequest(bucketName);

        //设置返回值模式
        //返回模式。true表示简单模式，false表示详细模式。默认为详细模式。
        deleteObjectsRequest.setQuiet(true);
         ArrayList srcs = new ArrayList<>();
         for(String name :names){
             srcs.add(StringUtils.getSourceName(name));
        }
        //执行删除
        DeleteObjectsResult deleteObjectsResult = ossClient.deleteObjects(deleteObjectsRequest.withKeys(srcs));

        //删除结果
        //删除结果。详细模式下为删除成功的文件列表，简单模式下为删除失败的文件列表。
        List<String> deletedObjects = deleteObjectsResult.getDeletedObjects();
        // 关闭OSSClient。
        ossClient.shutdown();

        //将删除失败的图片路径返回
        return deletedObjects;

    }
}
